import { request } from '@/utils/request/axios';
import { ErrorMessageMode, PageRequest, PageData } from '#/request';

import { KanbanOutputDto, KanbanOutputDtoSimple } from './admin/kanban/model';
import { KanbanNode } from './model/kanban';

/** 报表模块看板URL枚举 */
enum Api {
  /** 获取看板报表概要 */
  GetKanbansSimple = '/api/rpt/getKanbansSimple',
  /** 获取看板报表 */
  GetKanbans = '/api/rpt/getKanbans',
  /** 根据编号获取看板报表 */
  GetKanbanById = '/api/rpt/getKanbanById',
  /** 根据编号获取看板报表节点 */
  GetKanbanNodeById = '/api/rpt/getKanbanNodeById',
}

//#region 获取看板报表概要
/**
 * 获取看板报表概要
 * @param params 分页请求
 * @param mode 错误消息模型
 */
export function getRptKanbansSimple(params: PageRequest, mode: ErrorMessageMode = 'message') {
  return request.post<PageData<KanbanOutputDtoSimple>>(
    {
      url: Api.GetKanbansSimple,
      params: params,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 获取看板报表
/**
 * 获取看板报表
 * @param params 分页请求
 * @param mode 错误消息模型
 */
export function getRptKanbans(params: PageRequest, mode: ErrorMessageMode = 'message') {
  return request.post<PageData<KanbanOutputDto>>(
    {
      url: Api.GetKanbans,
      params: params,
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion

//#region 根据编号获取看板报表
/**
 * 根据编号获取看板报表
 * @param kanbanId 看板编号
 * @param mode 错误消息模型
 */
export function getKanbanById(kanbanId: string | bigint, mode: ErrorMessageMode = 'message') {
  return request.get<KanbanOutputDto>(
    {
      url: Api.GetKanbanById,
      params: { kanbanId: kanbanId },
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
//#region 根据编号获取看板报表节点
/**
 * 根据编号获取看板报表节点
 * @param kanbanId 看板编号
 * @param mode 错误消息模型
 */
export async function getKanbanNodeById(
  kanbanId: string | bigint,
  mode: ErrorMessageMode = 'message',
) {
  return request.get<KanbanNode>(
    {
      url: Api.GetKanbanNodeById,
      params: { kanbanId: kanbanId },
    },
    {
      errorMessageMode: mode,
    },
  );
}
//#endregion
